package com.example.bishe.toolclass;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.example.bishe.entity.Tag;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Author yws
 * @Date 2022/3/11 17:27
 */
@Component
public class BiaoQIan {
    @Resource
    RedisUtil redisUtil;
    @Resource
    ApiReturnDate apiReturnDate;
    @Resource
    StringTurnJson stringTurnJson;
    @Resource
    GitTonk gitTonk;
    @Resource
    JsonValue jsonValue;

    public List<Tag> biaoQian() {//获取所有的标签信息
        String access_token1 = Token();
        JSONObject mydate;
        String urltag = MyEnum.TAG_CAOZUO.getValue() + "list?access_token=" + access_token1;
        mydate = apiReturnDate.Mydate(urltag);//已经获取返回的JSON数据
        JSONObject jsonObject = stringTurnJson.getJson(String.valueOf(mydate));//把返回的JSON形式的String数据转换为JSONObject方便转换为数组
        JSONArray jsonArray = (JSONArray) jsonObject.get("taglist");
        List<Tag> list = jsonArray.toJavaList(Tag.class);//根据返回的标签数组来获取标签的键值对
        return list;
    }


    /**
     * 根据获取到的标签列表，返回所有的标签，以及标签下的人员列表
     *
     * @param list
     * @return
     */
    public Map<String, List<TagUser>> gitTagUser(List<Tag> list) {
        String access_token = Token();
        Map<String, List<TagUser>> map = new HashMap<>();//存储获取到的标签名称key，以及对应标签下的人员信息
        for (Tag tag : list) {//根据传过来的标签信息list集合获得所有的标签中的成员信息
            //System.out.println(tag.getTagid()+" "+tag.getTagname());
            JSONObject mydate =
                    apiReturnDate.Mydate(MyEnum.TAG_CAOZUO.getValue() +
                            "get?access_token=" + access_token +
                            "&tagid=" + tag.getTagid());
            mydate = stringTurnJson.getJson(String.valueOf(mydate));//返回的对应标签的成员
            JSONArray jsonArray = (JSONArray) mydate.get("userlist");
            map.put(tag.getTagname(), jsonArray.toJavaList(TagUser.class));//把数据包装之后存入到Map集合
        }
        return map;
    }
    public HashMap gitTagUserBytagid(String tagid) {
        String access_token = Token();
        JSONObject mydate =
               apiReturnDate.Mydate(MyEnum.TAG_CAOZUO.getValue() +
                    "get?access_token=" + access_token +
                    "&tagid=" + tagid);
        mydate = stringTurnJson.getJson(String.valueOf(mydate));//返回的对应标签的成员
        System.out.println(mydate);
        HashMap map = jsonValue.getValue(mydate, "errcode", "errmsg","tagname","userlist","partylist");
        return map;
    }

    /**
     * 首先找在Redis中有没有对应的useraccess_token信息，没有的话就生成并返回，有的话就直接在Redis中寻找
     *
     * @return
     */
    public String Token() {
        String access_token = null;
        if ((String)redisUtil.get("useraccess_token") == null) {//判断是不是通讯录的access_token是不是已经在redis中保存，如果保存有的话就直接可以使用
            access_token = gitTonk.gitTongXunTonk();
        } else {
            access_token = (String) redisUtil.get("useraccess_token");
        }
        return access_token;
    }
}
